

class LiczbaException extends Exception 
{
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	LiczbaException ( String w ) 
    {
	super(w);
    }
};

/**
 * 
 * @author Krzysztof
 */

public class Liczba 
{
    public int number;
    private static String cyfry[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" };
    
    Liczba(int n)
    {
    	number = n;
    }
    
    /**
     * 
     * @param n
     * @param podstawa
     * @throws LiczbaException 
     */
    Liczba (String n, int podstawa) throws LiczbaException  //nazwa z zadania
    {
    	if(podstawa == 0) throw new LiczbaException("podstawa nie może być równa 0");
    	if(podstawa < 2 || podstawa > 16) 
			throw new LiczbaException("zla podstawa");
		
            int temp[] = new int[n.length()];//tworzy tablicę
            for ( int x = 0 ; x < n.length() ; x++ ) //przechodzimy przez napis
            {
		int y=0;
		while(y < 16 && n.charAt(x) != cyfry[y].charAt(0))
			y++;
                //przechodzi po kolei przez znaki. Wykonuje cały czas pętlę
		if(y==16 || y > podstawa) throw new LiczbaException("zapis liczby o podanej podstawie jest niepoprawny");
		else
			temp[x] = y;//przerabia string na tablię wartości w systemie dziesiętnym
            }
            number = 0;
            for ( int x = 0, p = n.length()-1 ; x < n.length() ; x++, p-- ) {
		number += temp[x] * Math.pow (podstawa, p);//trzeba zsumować wartości
                //np. 1, 0, 10, --- 10 *10(podstawa)^0(pozycja) + 0*10^1...
            }
    }
    
    public String zapis (int podstawa) throws LiczbaException //nazwa z zadania
    {
    	if(podstawa < 2 || podstawa > 16) throw new LiczbaException("zla podstawa");
         
        int x = 0, reszta, liczba = number;
        String wynik = "", temp[] = new String[88];
      //  String[] wyn = new String[15];
        
        while ( liczba != 0 ) //liczbę w syst dziesiętnym zamienia na inną
        {
            reszta = liczba % podstawa;//liczy modulo i dzieli do tej pory aż nie będzie zerem
            liczba = liczba / podstawa;//by odciąć ostatnią cyfrę
            temp[x] = cyfry[reszta];//w tabl. stringów...- bierze cyfrę, sprawdza jaką ma wartość i wpisuje
                x++;//x-indeks z tablicy
        }
        while ( x > 0 ) //x-ilosć elementów wtablicy temp
        {
            x--;
            wynik = wynik + temp[x];//odwraca napis i przerabia na string
        }
	return wynik;
    }	
}
